【Unity3D】在Unity中实现UI指向箭头

您所在的位置:网站首页 arrow 游戏 【Unity3D】在Unity中实现UI指向箭头

【Unity3D】在Unity中实现UI指向箭头

2023-10-07 16:32| 来源: 网络整理| 查看: 265

本问转载自http://ghostyii.com/uiarrow/,为什么转载呢,怕以后找不到了! ps:博主写到超级详细,复制粘贴即可使用,超赞的! 

0x0.引言

屏幕UI指示箭头,非常常见的游戏UI元素。它是一个动态的,可以帮助玩家在目标脱离屏幕范围时指示出大概方位的UI元素。 它在游戏中可以充当多种功能,如在玩家受到伤害时只是伤害来源位置、如显示任务目标点或游戏资源的位置、如在多人游戏中显示队友的位置等等。下图是游戏COD16的一张截图,此图非常直观的显示出了UI Arrow的作用。  

本文将讲述如何在Unity中实现UI指向箭头的效果。

0x1.基础思路

我们希望指示箭头会一直显示在屏幕中,如果目标物体出现在屏幕中时,指示箭头会显示在目标物体的屏幕坐标位置,而目标物体离开屏幕视野时,指示箭头会在屏幕边缘显示其位置。 那么其对应的基本思路是非常明确且清晰的:将目标物体世界坐标转换为对应的屏幕坐标,然后根据其屏幕坐标限制其的显示位置,若坐标不在UI范围内,则限制其坐标点使其先是在边缘位置。

0x2.编码实现

此处的编码我将会一步一步进行实现直至实现最终效果。

0x2.0.坐标转换

本文使用2D物体作为演示目标。 Unity的坐标转换是开发者遇到的非常常见的问题,转换坐标只需要关注不同坐标轴的对应原点和坐标轴朝向即可,具体的计算可以通过Unity提供的API实现。 此处用到的转换关系为:2D世界坐标轴->2D屏幕坐标轴。本文使用的UI为Unity自带的UGUI系统,用到的API为:

RectTransformUtility.WorldToScreenPoint(Camera cam, Vector3 worldPos)

值得注意的一点是,如果将上述API计算得到的值用于RectTransform的anchoredPosition,则需要将该UI元素的锚点设置为left-bottom。这样做的目的是使得两个坐标轴的原点一致,如果想忽略锚点所带来的影响,则直接把计算得到的值赋值给RectTransform.position即可。

0x2.1.限制范围

目前的效果仅仅只是做出了坐标转换,并没有把UI元素限制在视口范围内。现阶段的效果如下:

上图中,红色菱形方块代表世界物块,白色圆形物体代表UI指向箭头。从图中可以发现白色UI始终在屏幕坐标中的正确位置,但是当右侧红色物体移动至屏幕外时,白色物体也跟着移动到了屏幕外。这显然不是想要的效果。 下一步的工作就是将UI元素的位置限制在玩家的屏幕内。 由于使用的是UGUI,所以此处的“玩家屏幕范围”应该特指挂载了Canvas组件的RectTransform的大小。故在脚本中需要引用一个canvas组件。 单纯的限制范围实现非常简单,下面的代码演示了如何将一个UI物体限制在某个指定的矩形范围内。

private Vector2 Ge


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3